var express = require('express');
var router = express.Router();

const sql = require("../sql/sql");
const pro = require("../sql/pro");

/**
* @apiGroup 商品数据
* @api {get} /api/pro 获取商品数据
* @apiVersion 0.0.0
* @apiDescription 请求所有商品数据，不需要传参
* @apiSuccess {number} state 请求状态
* @apiSuccess {string} title 请求说明
* @apiSuccess {object} data 请求数据
* @apiSuccessExample {json} Success-Response:
* {
*    "state":200,
*    "title":"请求成功",
*    "data":[{},{},...]
* }
* @apiSampleRequest http://localhost:3000/api/pro
*/

// 获取所有商品
router.get('/', function(req, res, next) {
    sql.find(pro,{},{_id:0,__v:0}).then(data=>{
        res.send({
            state:200,
            title:"请求成功",
            data:data
        })
    })
});

/**
* @apiGroup 商品数据
* @api {get} /api/pro/one 获取商品详情数据
* @apiVersion 0.0.0
* @apiDescription 获取商品详情数据，需要发送商品Id
* @apiParam {String} id 商品Id
* @apiSuccess {number} state 请求状态
* @apiSuccess {string} title 请求说明
* @apiSuccess {object} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    state:200,
    title:"请求成功",
    data:data
})
* @apiError {number} state 请求状态
* @apiError {string} title 请求说明
* @apiError {String} data 请求数据
* @apiErrorExample {json} Error-Response:
res.send({
    state:204,
    title:"请求失败",
    data:"NOT DATA"
})
* @apiSampleRequest http://localhost:3000/api/pro/one
*/

// 获取单个商品
router.get('/one', function(req, res, next) {
    const {id} = req.query;
    if(!id) res.send({
        state:203,
        title:"请求失败，没有发送id参数",
        data:"NOT DATA"
    });

    sql.find(pro,{proId:id},{_id:0,__v:0}).then(data=>{
        res.send({
            state:200,
            title:"请求成功",
            data:data[0]
        })
    }).catch(err=>{
        res.send({
            state:204,
            title:"请求失败",
            data:"NOT DATA"
        })
    })
});

/**
* @apiGroup 商品数据
* @api {get} /api/pro/page 获取指定分页的商品数据
* @apiVersion 0.0.0
* @apiDescription 获取指定分页的商品数据，需要发送页码和单页条数
* @apiParam {Number} index=0 页码
* @apiParam {Number} num=10 单页条数
* @apiSuccess {number} state 请求状态
* @apiSuccess {string} title 请求说明
* @apiSuccess {object} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    state:200,
    title:"请求成功",
    data:data
})
* @apiSampleRequest http://localhost:3000/api/pro/page
*/

// 获取分页商品
router.get('/page', function(req, res, next) {
    // 接收页面发送的分页要求
    let {index=0,num=10} = req.query;
    // 请求分页数据：注意页面过来的数据的类型
    sql.page(pro, {}, {}, num-0, index*1).then(data=>{
        res.send({
            state:200,
            title:"请求成功",
            data
        });
    })
})

/**
* @apiGroup 商品数据
* @api {get} /api/pro/sort 获取指定字段排序后的商品数据
* @apiVersion 0.0.0
* @apiDescription 获取指定字段排序后的商品数据，需要发送排序字段和排序方向，需要手动在地址中拼接要排序的字段和排序方向（1或-1）
* @apiSuccess {number} state 请求状态
* @apiSuccess {string} title 请求说明
* @apiSuccess {object} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    state:200,
    title:"请求成功",
    data:data
})
* @apiSampleRequest http://localhost:3000/api/pro/sort
*/

// 获取排序商品
router.get('/sort', function(req, res, next) {
    const obj = req.query;
    sql.sort(pro, {}, {}, obj).then(data=>{
        res.send({
            state:200,
            title:"请求成功",
            data
        })
    })
})


/**
* @apiGroup 商品数据
* @api {get} /api/pro/search 根据指定关键字搜索商品名称
* @apiVersion 0.0.0
* @apiDescription 根据指定关键字搜索商品名称，需要发送搜索关键字
* @apiParam {String} search 要搜索的关键字
* @apiSuccess {number} state 请求状态
* @apiSuccess {string} title 请求说明
* @apiSuccess {object} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    state:200,
    title:"请求成功",
    data:data
})
* @apiSampleRequest http://localhost:3000/api/pro/search
*/

// 获取搜索商品
router.get('/search',(req, res, next)=>{
    const obj = req.query;
    let reg = new RegExp(obj.search);
    sql.find(pro, {proName:reg}, {_id:0,__v:0}).then(data=>{
        res.send({
            state:200,
            title:"请求成功",
            data
        })
    })
})

/**
* @apiGroup 商品数据
* @api {get} /api/pro/count 获取数据总条数
* @apiVersion 0.0.0
* @apiDescription 获取数据总条数
* @apiSuccess {number} state 请求状态
* @apiSuccess {string} title 请求说明
* @apiSuccess {object} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    state:200,
    title:"请求成功",
    data:data
})
* @apiSampleRequest http://localhost:3000/api/pro/count
*/

// 获取商品个数
router.get('/count',(req, res, next)=>{
    sql.count(pro).then(data=>{
        res.send({
            state:200,
            title:"请求成功",
            data
        })
    })
})


/**
* @apiGroup 商品数据
* @api {get} /api/pro/column 获取商品分类
* @apiVersion 0.0.0
* @apiDescription 获取商品分类
* @apiSuccess {number} state 请求状态
* @apiSuccess {string} title 请求说明
* @apiSuccess {object} data 请求数据
* @apiSuccessExample {json} Success-Response:
res.send({
    state:200,
    title:"请求成功",
    data:data
})
* @apiSampleRequest http://localhost:3000/api/pro/column
*/

// 获取商品分类
router.get('/column',(req, res, next)=>{
    sql.distinct(pro,"column").then(data=>{
        res.send({
            state:200,
            title:"请求成功",
            data
        })
    })
})

module.exports = router;
